#ifndef __FDK_H__
#define __FDK_H__

#include <string>
using namespace std;

struct FDKPara {
	string strProjectionFilename;
	string strReconstructionFilename;
	string strPmatricesFilename;
	int nDetectorKind;
	int nDetectorColumnNumber;
	int nDetectorRowNumber;
	float fDetectorTotalWidth;
	float fDetectorTotalHeight;
	float fOffSet;
	int nSourceType;
	float fSourceAxisDistance;
	float fSourceDetectorDistance;
	float fStartOffAngle;
	float fStartSourceHeight;
	int nProjectionsPerRotation;
	int nProjectionNumber;
	int nFilterType;
	bool bParkWeighting;
	bool bReconstructCylinder;
	float fCenterX;
	float fCenterY;
	float fCenterZ;
	float fSampleIntervalX;
	float fSampleIntervalY;
	float fSampleIntervalZ;
	int nImageX;
	int nImageY;
	int nImageZ;
};

void InitializeGlobalData();
void CleanupGlobalData();
void FDK();
void ApplyParkerWeighting(float *pPrj, int nAngle);
void ComputeOneAngleED(float *pPrj, float *pRcn, float fAngle);
void ComputeOneAngleEA(float *pPrj, float *pRcn, float fAngle);
void ComputeOneAngleEDPmatrices(float *pPrj, float *pRcn, float * pfPmartix, float fAngle);


#endif //__FDK_H__
